flutter_webview WKWebview 百度循环加载问题
Flutter 3.24 后,flutter_webview
第一时间支持了 macOS 平台。在使用中,我发现 flutter_webview
在 macOS 下的 WKWebview,在打开百度时,WKWebview 会出现循环加载问题。当打开其它网站时,并无这一问题。
flutter_webview
是对各个平台下的 WebView 的一种统一封装,因此这个问题实际上是与 WKWebview。经过搜索,找到一摸一样的问题讨论《iPad iOS16+ Can't load "https://w… | Apple Developer Forums》。
链接中给出了 iOS 语境下的修复方式。于是问题变为,如何将这一修复,在 flutter_webview
这种 Flutter pub 依赖的语境下应用。
iOS/macOS 原生开发解决方案
涉及 API:
(void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction preferences:(WKWebpagePreferences *)preferences decisionHandler:(void (^)(WKNavigationActionPolicy, WKWebpagePreferences *))decisionHandler{ [preferences setPreferredContentMode:WKContentModeMobile]; decisionHandler(WKNavigationActionPolicyAllow, preferences);
(void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction preferences:(WKWebpagePreferences *)preferences decisionHandler:(void (^)(WKNavigationActionPolicy, WKWebpagePreferences *))decisionHandler{ [preferences setPreferredContentMode:WKContentModeMobile]; decisionHandler(WKNavigationActionPolicyAllow, preferences);
修复代码:
let webConfiguration = WKWebViewConfiguration()
if UIDevice.current.userInterfaceIdiom != .phone {
let prefer = WKWebpagePreferences()
prefer.preferredContentMode = .mobile
webConfiguration.defaultWebpagePreferences = prefer
}
webView = WKWebView(frame: .zero, configuration: webConfiguration)
if UIDevice.current.userInterfaceIdiom != .phone {
webView.customUserAgent = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.0 Safari/605.1.15"
}
Flutter 开发修复方案
解决方法很简单,设置一下 User-Agent 就可以了:
_controller = WebViewController()
//...
..setUserAgent(
'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.0 Safari/605.1.15 Mobile',
);
本文作者:Maeiee
本文链接:flutter_webview WKWebview 百度循环加载问题
版权声明:如无特别声明,本文即为原创文章,版权归 Maeiee 所有,未经允许不得转载!
喜欢我文章的朋友请随缘打赏,鼓励我创作更多更好的作品!